/*MyPhotoIndex Free Photo Organizer <www.myphotoindex.com>
  Copyright (C) <2006-2009>  <Asaf Yarkoni asaf@yarkoni.net>

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
using System;
using System.Collections.Generic;
using System.Text;
using MyPhotoIndex.Interfaces;
using MyPhotoIndex.Interfaces.Imaging;
using MyPhotoIndex.Interfaces.Tagging;
using MyPhotoIndex.Interfaces.ImageFormatProviders;
using System.Drawing;

namespace MyPhotoIndex
{
    class TagsImageData : IImageData
    {
        private IImageTag m_imageTag;

        #region IImageData Members

        public event EventHandler ImageDataChangedEvent;

        public void InvokeChangedEvent()
        {
            throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
        }

        public TagsImageData(IImageTag imageTag)
        {
            m_imageTag = imageTag;
        }

        public int Id
        {
            get { return m_imageTag.Id; }
            set {  throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public object SyncLock
        {
            get { return this; }
        }

        public string ImportBatchNumber
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
            set  {  throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);  }
        }

        public DateTime DateTaken
        {
            get
            {
                return DateTime.Now;
            }
            set
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
        }

        public DateTime DateDigitized
        {
            get
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
            set
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
        }

        public System.Drawing.Image Thumbnail
        {
            get
            {
                return m_imageTag.Thumbnail;
            }
            set
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
        }

        public int ThumbnailReferences
        {
            get { return 0; }
            set{}
        }

        public string FileName
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
            set { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public string FileExtention
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public IImageFormatProvider FormatProvider
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public System.Drawing.Size ImageSize
        {
            get
            {
                if (m_imageTag.Thumbnail == null)
                {
                    return System.Drawing.Size.Empty;
                }
                return m_imageTag.Thumbnail.Size;
            }
            set
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
        }

        public System.Drawing.Size ThumbnailSize
        {
            get
            {
                if (m_imageTag.Thumbnail == null)
                {
                    return System.Drawing.Size.Empty;
                }

                return m_imageTag.Thumbnail.Size;
            }
            set
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
        }

        public ImageLinkStatus LinkStatus
        {
            get
            {
                return ImageLinkStatus.Valid;
            }
            set
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
        }

        public string Comment
        {
            get
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
            set
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
        }

        public int[] Tags
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public void AddTags(int[] tagIds)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void RemoveTag(int tagId)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void ClearTags()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public bool TagExists(int tagId)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public int Rating
        {
            get
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
            set
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
        }

        public bool IsVideo
        {
            get { return false; }
        }

        public bool CanRotate
        {
            get { return false; }
        }

        public bool Encrypted
        {
            get { return false; }
        }

        public string CameraMaker
        {
            get { return String.Empty; }
        }

        public string CameraModel
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public string SoftwareUsed
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public float Aperture
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public string ExposureTime
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public CameraExposureProgram ExposureProgram
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public int IsoSpeed
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public int ExposureCompensation
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public CameraMeteringMode MeteringMode
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public ImageLightSource LightSource
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public CameraFlashStatus FlashStatus
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public float FocalLength
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
        }

        public int[] Categories
        {
            get
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
        }

        public void AddCategories(int[] categoryIds)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void RemoveCategory(int categoryId)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void ClearCategories()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public bool CategoryExists(int tagId)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void Rotate(System.Drawing.RotateFlipType rotationType)
        {
            throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
        }

        public void Delete(bool deleteFromDisk, bool sendToRecycleBin)
        {
            throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
        }

        public void Update(bool updateExif, bool updateThumbnail)
        {
            throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
        }

        public void LoadImage(System.Drawing.Size requestedSize, ImageLoadDelegate imageLoadDelegate)
        {
            
        }

        public System.Drawing.Image CreateThumbnail(Size size)
        {
            throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
        }

        #endregion

        #region IDisposable Members

        public void Dispose()
        {
            
        }

        #endregion

        #region IImageData Members


        public string FileSignature
        {
            get { throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented); }
            set
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
        }

        #endregion

        #region IImageData Members


        public DateTime LastModified
        {
            get
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
            set
            {
                throw new NotImplementedException(Resources.Resources.MethodIsNotImplemented);
            }
        }

        #endregion

        #region IImageData Members

        public int VersionParentId
        {
            get { throw new NotImplementedException(); }
            set { throw new NotImplementedException(); }
        }

        public DateTime VersionDate
        {
            get { throw new NotImplementedException(); }
            set { throw new NotImplementedException(); }
        }

        #endregion

        #region IImageData Members


        public int VersionsCount
        {
            get { return 0; }
            set { throw new NotImplementedException(); }
        }

        public string SourceLabel
        {
            get { throw new NotImplementedException(); }
            set { throw new NotImplementedException(); }
        }

        #endregion
    }
}
